Learn in 10 minutes

Learn in 10 minutes

10分钟学会 Lua 编程

Lua是个超级轻量的编程语言,专门用来嵌入到其他程序里面用。很多游戏比如《魔兽世界》、Roblox都在用Lua,还有很多软件也拿它来做配置脚本。

1. 编写第一个 Lua 程序

从最简单的开始。新建一个叫hello.lua的文件,里面写:

print("Hello, World!")

保存之后,在命令行里运行:

lua hello.lua

你就会看到:

Hello, World!

就这么简单!print()就是用来在屏幕上显示文字的。

2. 基本语法规则

Lua 的语法比较简单:

-- 这是单行注释,就像聊天时候的备注
print("你好世界!")

--[[
这是多行注释
想写多少行都行
]]

记住这几个要点:

  • 注释:单行用--,多行用--[[ ]]
  • 语句:一行写一个命令,不用加分号
  • 大小写:Lua分大小写,nameName是两码事
  • 空格:空格和换行随便用,不影响代码

3. 变量和数据类型

在 Lua 里面不用事先告诉它变量是什么类型:

-- 直接赋值就行
名字 = "Lua"
年龄 = 25
很牛逼 = true
圆周率 = 3.14159

-- 还能一次性赋多个值
x, y, z = 10, 20, 30

-- 空值用nil表示
空变量 = nil

print("名字:", 名字)
print("年龄:", 年龄)
print("牛逼不:", 很牛逼)

Lua有这些数据类型:

  • nil:啥也没有
  • boolean:就是true或false
  • number:数字,不分整数小数
  • string:字符串,就是文字
  • table:这是Lua的大杀器,什么数组、字典都能装
  • function:函数,一等公民
  • userdata:给C语言用的
  • thread:协程,高级玩法

4. 字符串操作

-- 字符串几种写法
str1 = "你好"
str2 = '世界'
str3 = [[多行
字符串真方便]]

-- 字符串拼接用..
问候语 = str1 .. " " .. str2
print(问候语)  -- 输出: 你好 世界

-- 字符串长度用#
长度 = #"你好"
print(长度)   -- 输出: 2

-- 字符串方法
文本 = "hello world"
大写 = 文本:upper()
小写 = 文本:lower()
截取 = 文本:sub(1, 5)

print(大写)    -- 输出: HELLO WORLD
print(截取)      -- 输出: hello

5. 表(Table)- Lua的万能容器

表是 Lua 最牛逼的东西,什么都能装,简称装逼!!!:

-- 当数组用(注意从1开始数)
水果 = {"苹果", "香蕉", "樱桃"}
print(水果[1])  -- 输出: 苹果
print(水果[2])  -- 输出: 香蕉

-- 当字典用
人物 = {
    名字 = "小明",
    年龄 = 30,
    城市 = "北京"
}
print(人物.名字)    -- 输出: 小明
print(人物["年龄"])  -- 输出: 30

-- 混合着用也没问题
混合表 = {
    "苹果",
    "香蕉", 
    颜色 = "红色",
    数量 = 5
}

-- 表操作
水果 = {"苹果", "香蕉"}
table.insert(水果, "樱桃")  -- 往最后加
table.insert(水果, 2, "橙子") -- 插到第二个位置

print(table.concat(水果, ", "))  -- 输出: 苹果, 橙子, 香蕉, 樱桃

6. 流程控制

-- if语句
年龄 = 18

if 年龄 >= 18 then
    print("成年人了")
elseif 年龄 >= 13 then
    print("青少年")
else
    print("小朋友")
end

-- while循环
计数器 = 1
while 计数器 <= 5 do
    print("计数:", 计数器)
    计数器 = 计数器 + 1
end

-- for循环(数字的)
for i = 1, 5 do
    print("数字:", i)
end

-- for循环(带步长)
for i = 10, 1, -2 do
    print("倒着数:", i)
end

-- for循环(遍历表)
水果 = {"苹果", "香蕉", "樱桃"}
for 序号, 水果名 in ipairs(水果) do
    print(序号, 水果名)
end

人物 = {名字 = "小明", 年龄 = 30}
for ,  in pairs(人物) do
    print(, )
end

7. 函数

-- 基本函数
function 打招呼(名字)
    return "你好, " .. 名字 .. "!"
end

消息 = 打招呼("小红")
print(消息)  -- 输出: 你好, 小红!

-- 函数能返回多个值
function 计算(a, b)
    return a + b, a - b, a * b, a / b
end

, , ,  = 计算(10, 5)
print("和:", )        -- 输出: 和: 15
print("差:", ) -- 输出: 差: 5

-- 匿名函数(也叫lambda)
 = function(x, y)
    return x * y
end

结果 = (4, 5)
print(结果)  -- 输出: 20

-- 函数当参数传
function 执行操作(x, y, 操作)
    return 操作(x, y)
end

结果 = 执行操作(6, 7, )
print(结果)  -- 输出: 42

8. 模块化

把代码分开写更清爽。先建个数学工具.lua

-- 数学工具.lua
local 数学工具 = {}

function 数学工具.(a, b)
    return a + b
end

function 数学工具.(a, b)
    return a * b
end

return 数学工具

然后在主文件里用:

-- 主程序.lua
local 数学工具 = require("数学工具")

结果 = 数学工具.(10, 5)
print("加法结果:", 结果)  -- 输出: 加法结果: 15

结果 = 数学工具.(4, 6)
print("乘法结果:", 结果)  -- 输出: 乘法结果: 24

9. 错误处理

-- 用pcall抓错误
function 危险操作()
    error("完犊子了!")
end

-- pcall能保护调用
成功, 结果 = pcall(危险操作)

if 成功 then
    print("搞定了:", 结果)
else
    print("翻车了:", 结果)
end

-- 自己抛错误
function (a, b)
    if b == 0 then
        error("别除以零啊兄弟")
    end
    return a / b
end

成功, 结果 = pcall(, 10, 0)
if not 成功 then
    print("出错啦:", 结果)
end

10. 实战例子

-- 简易计算器
function 计算器()
    print("🐮 简易计算器")
    print("1. 加")
    print("2. 减") 
    print("3. 乘")
    print("4. 除")
    
    选择 = tonumber(io.read())
    print("输第一个数:")
    1 = tonumber(io.read())
    print("输第二个数:")
    2 = tonumber(io.read())
    
    if 选择 == 1 then
        结果 = 1 + 2
        print("结果:", 结果)
    elseif 选择 == 2 then
        结果 = 1 - 2
        print("结果:", 结果)
    elseif 选择 == 3 then
        结果 = 1 * 2
        print("结果:", 结果)
    elseif 选择 == 4 then
        if 2 ~= 0 then
            结果 = 1 / 2
            print("结果:", 结果)
        else
            print("❌ 别除以零")
        end
    else
        print("🤔 选错了")
    end
end

-- 想用就取消注释
-- 计算器()

-- 文件操作
function 读文件(文件名)
    local 文件 = io.open(文件名, "r")
    if not 文件 then
        return nil, "打不开文件"
    end
    
    local 内容 = 文件:read("*a")
    文件:close()
    return 内容
end

内容, 错误 = 读文件("例子.txt")
if 内容 then
    print("文件内容:", 内容)
else
    print("出错:", 错误)
end

总结

Lua这语言真心好用!特别适合:

  • 🎮 做游戏脚本(很多游戏都用它)
  • 🔧 嵌入式开发(因为特别轻量)
  • ⚙️ 配置文件和自动化脚本
  • 🚀 需要高性能的场景(配合LuaJIT)

Lua的牛逼之处:

  • 轻如鸿毛:占用空间超级小
  • 快如闪电:LuaJIT编译后飞快
  • 随心所欲:动态类型+万能table
  • 到处能跑:从手机到服务器都能用
  • 好嵌入:和C/C++配合默契

想继续深入?可以玩玩:

  • Lua的标准库函数
  • 协程(做并发编程)
  • 元表和元方法(实现面向对象)
  • Lua和C的交互
  • Love2D游戏框架

Lua上手快,功能强,赶紧用起来吧!🚀